#pragma once
#include "Vector4.h"

namespace DYMath
{
	struct Matrix4x4
	{
		typedef Vector4 col_type;
		col_type value[4];

		Matrix4x4();
	    
		Matrix4x4(const Matrix4x4& m);

		Matrix4x4(const Vector4& v1, const Vector4& v2, const Vector4& v3, const Vector4& v4);

		Matrix4x4(
			float x1, float y1, float z1, float w1,
			float x2, float y2, float z2, float w2,
			float x3, float y3, float z3, float w3,
			float x4, float y4, float z4, float w4
		);

		Vector4& operator[](int i);

		const Vector4& operator[](int i) const;

		Matrix4x4& operator=(const Matrix4x4& m);

		static Matrix4x4 Transpose(Matrix4x4 mat);
	};

	typedef Matrix4x4 Mat4;

	Matrix4x4 operator+(const Matrix4x4& m1, const Matrix4x4& m2);

	Matrix4x4 operator-(const Matrix4x4& m1, const Matrix4x4& m2);

	Matrix4x4 operator*(const Matrix4x4& m, float scaler);

	Matrix4x4 operator*(float scaler, const Matrix4x4& m);
}


